/**
 * loadsh get 方法的使用
 */
module.exports.get = function (obj, formula, defult = 'defult') {
  let hanldeArr = []
  let reg = /(.+)\[(.+)\]/
  // 1.解析 formula
  if (typeof formula == 'string') {
    // 大概率是链式调用
    let tempArr = formula.split('.')
    for (let item of tempArr) {
      // 取得空格的长度
      if (reg.test(item)) {
        hanldeArr.push(RegExp.$1, RegExp.$2)
      } else {
        hanldeArr.push(item)
      }
    }
  } else {
    // formula 是一个数组的情况
    hanldeArr = formula
  }
  // 2. 通过循环的方式 处理我的 引用
  let ret  = obj
  for(let i=0; i<hanldeArr.length; i++) {
    if(ret[hanldeArr[i]] !== undefined) {
      ret = ret[hanldeArr[i]]
      continue
    }
    return defult
  }
  return ret
}

/**
* object: 对象
* path: 输入的路径
* defaultVal: 默认值
**/
module.exports.get2 =  function (object, path, defaultVal='undefined') {
    // 先将path处理成统一格式
    let newPath = [];
    if (Array.isArray(path)) {
        newPath = path;
    } else {
        // 先将字符串中的'['、']'去除替换为'.'，split分割成数组形式
        newPath = path.replace(/\[/g,'.').replace(/\]/g,'').split('.');
    }

    // 递归处理，返回最后结果
    return newPath.reduce((o, k) => {
        // console.log(o, k); // 此处o初始值为下边传入的 object，后续值为每次取的内部值
        return (o || {})[k]
    }, object) || defaultVal;   
}